import java.util.HashMap;
import java.util.Map;

/**
 * Created whit IntelliJ IDEA.
 * Description：
 * User：ZHONGCHEN
 * Date:2022-02-09
 * Time:12:10
 */
public class TestDemo {
    /***
     * 给你一个整数数组 nums 和一个整数 k ，请你返回数对 (i, j) 的数目，满足 i < j 且 |nums[i] - nums[j]| == k 。
     * |x| 的值定义为：
     * 如果 x >= 0 ，那么值为 x 。
     * 如果 x < 0 ，那么值为 -x 。
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/count-number-of-pairs-with-absolute-difference-k
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。*/
    public int countKDifference(int[] nums, int k) {
        //直接遍历
        int ans = 0;
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (Math.abs(nums[i] - nums[j]) == k) {
                    ans++;
                }
            }
        }
        return ans;
    }

    public int countKDifference1(int[] nums, int k) {
        int ans = 0;
        //利用哈希桶
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            //ans+=(桶里存有该数字-k的绝对值)的数量
            ans += map.getOrDefault(nums[i] - k, 0) + map.getOrDefault(nums[i] + k, 0);
            //存入该数字,以及出现的次数
            map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
        }
        return ans;
    }
}
